package com.fqy.ticket.generator.gen;

import freemarker.template.TemplateException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ServerGeneratorTest {
    // 生成文件的目标路径，使用双反斜杠转义，确保在Windows系统上路径正确
    static String toPath = "genrerator\\src\\main\\java\\com\\fqy\\ticket\\generator\\test\\";
    static String pomPath = "genrerator\\pom.xml";
    // 静态代码块：在类加载时执行，确保目标目录存在
    static {
        // 创建toPath指定的目录，如果目录已存在则不执行任何操作
        // mkdirs()会创建所有必需但不存在的父目录
        new File(toPath).mkdirs();
    }

    /**
     * 程序入口点：演示Freemarker模板生成Java文件的过程
     * @throws IOException 如果模板文件或输出文件操作失败
     * @throws TemplateException 如果模板处理过程中出现错误
     */
    public static void main(String[] args) throws Exception {
        String generatorPath = getGenerator();

        // 相对于当前工作目录,默认是项目根目录（即.idea或.project文件所在目录）
        Document document = new SAXReader().read("genrerator/" + generatorPath);
        Node table = document.selectSingleNode("//table");
        System.out.println(table);
        Node tableName = table.selectSingleNode("@tableName");
        Node domainObjectName = table.selectSingleNode("@domainObjectName");
        System.out.println(tableName.getText() + "/" + domainObjectName.getText());

        // // 1. 初始化Freemarker配置并加载模板文件
        // // 指定使用classpath下的"test.ftl"模板
        // FreemarkerUtil.initConfig("test.ftl");
        //
        // // 2. 准备数据模型，用于填充模板中的变量
        // Map<String, Object> param = new HashMap<>();
        // // 向数据模型中添加一个名为"domain"的变量，值为"Test1"
        // // 这个变量将在模板中通过${domain}引用
        // param.put("domain", "Test1");
        //
        // // 3. 执行模板生成，将结果写入指定文件
        // // 输出文件路径为toPath + "Test1.java"
        // // 模板引擎会将"test.ftl"中的${domain}替换为"Test1"
        // FreemarkerUtil.generator(toPath + "Test1.java", param);
    }

    private static String getGenerator() throws DocumentException {
        SAXReader saxReader = new SAXReader();
        Map<String, String> map = new HashMap<String, String>();
        map.put("pom", "http://maven.apache.org/POM/4.0.0");
        saxReader.getDocumentFactory().setXPathNamespaceURIs(map);
        Document document = saxReader.read(pomPath);
        Node node = document.selectSingleNode("//pom:configurationFile");
        System.out.println(node.getText());
        return node.getText();
    }
}

